---
title: "Accidentes de transito en CR entre 2016-2022"
output: html_notebook
---

```{r, echo = FALSE}
data <- read.csv("accidentes_transito_con_victimas_2016_2022.csv", sep = ";")
```

```{r, echo = FALSE}
library(dplyr)
library(ggplot2)
library(plotly)
```

```{r, echo=FALSE}
#obtenemos los meses, dias y la ruta donde
#mas accidentes hay
meses_dias_RU_mas_accidentes <- data %>%
  filter(grepl("^[A-L]\\..*\\s(Enero|Febrero|Marzo|Abril|Mayo|Junio|Julio|Agosto|Setiembre|Octubre|Noviembre|Diciembre)$", Mes)) %>%
  filter(grepl("^[1-7]\\.(Domingo|Lunes|Martes|Miércoles|Jueves|Viernes|Sábado)$", Día)) %>%
  group_by(Mes,Día,Ruta) %>%
  summarise(MDtotal_accidentes = n()) %>%
  arrange(desc(MDtotal_accidentes))

registros_mas_frecuentes <- meses_dias_RU_mas_accidentes %>%
  group_by(Mes) %>%
  slice(1)
  
numero_mes <- seq(1, 12, length.out = nrow(registros_mas_frecuentes))
numero_mes <- as.integer(numero_mes)
registros_mas_frecuentes <- cbind(registros_mas_frecuentes, NumeroMes = numero_mes)

# Crear una columna para el número de día según el día de la semana en registros_mas_frecuentes
registros_mas_frecuentes$ColorDia <-ifelse(registros_mas_frecuentes$Día == "1.Domingo", "blue",
                                            ifelse(registros_mas_frecuentes$Día == "2.Lunes", "red",
                                            ifelse(registros_mas_frecuentes$Día == "3.Martes", "yellow",
                                            ifelse(registros_mas_frecuentes$Día == "4.Miércoles", "cyan",
                                            ifelse(registros_mas_frecuentes$Día == "5.Jueves", "darkgreen",
                                            ifelse(registros_mas_frecuentes$Día == "6.Viernes", "brown",
                                            ifelse(registros_mas_frecuentes$Día == "7.Sábado", "black", NA)))))))

registros_mas_frecuentes$idRuta <-ifelse(registros_mas_frecuentes$Ruta == "Cantonal", 1)
                                          
registros_mas_frecuentes$Mes <- gsub("[A-L]\\.", "", registros_mas_frecuentes$Mes)

registros_mas_frecuentes$Día <- gsub("[1-7]\\.", "", registros_mas_frecuentes$Día)

```

```{r, echo = FALSE}
grafico_chernoff <- ggplot(registros_mas_frecuentes, aes(x = NumeroMes, y = idRuta,label1 = Mes,label2 = Ruta,label3 = Día)) +
  geom_point(size = 9,colour = registros_mas_frecuentes$ColorDia) +
  labs(x = "Mes",y = "Ruta") +
  geom_text(aes(label = "👁️ 👁️"),vjust = -5, size = 3)+  
  geom_text(aes(label = "👄"), vjust = 5, size = 2) +
  theme_bw()

# Convertimos el gráfico ggplot2 en uno interactivo con plotly
grafico_interactivo <- ggplotly(grafico_chernoff,tooltip = c("label1", "label2", "label3"))

# Mostramos el gráfico interactivo
grafico_interactivo

# 12 caras por los meses, color cara dias ... y tamanho cara ruta
```

```{r,echo=FALSE}
ruralUrbano_mas_accidentes<-data %>%
  group_by(Rural.o.urbano)%>%
  summarise(RUtotal_accidentes = n()) %>%
  arrange(desc(RUtotal_accidentes))
# desde 2016 hastas 2022
```

```{r,echo=FALSE}
labels = ruralUrbano_mas_accidentes$Rural.o.urbano
values = ruralUrbano_mas_accidentes$RUtotal_accidentes

fig <- plot_ly(type='pie', labels=labels, values=values, 
               textinfo='label+percent',
               insidetextorientation='radial')
fig <- fig %>% layout(title = 'Accidentes por ruta entre 2016-2022')

fig
```

```{r,echo=FALSE}
#y =mideplan x= canton
#tener canton con mas y menos accidentes
region_canton_mas_accidentes<-data%>%
  group_by(Región.Mideplan, Cantón)%>%
  summarise(RCtotal_accidentes = n(),.groups = "drop")

region_canton_mas_accidentes<-region_canton_mas_accidentes%>%
  group_by(Región.Mideplan, Cantón)%>%
  summarise(max_valor = max(RCtotal_accidentes),.groups = "drop")%>%
  arrange(max_valor)

colores_base <- c("#FF0000", "#00FF00", "#0000FF")  # Ejemplo de colores base

# Generar una paleta de colores con 176 colores utilizando los colores base
paleta_colores <- colorRampPalette(colores_base)(176)
```

```{r,echo=FALSE}

fig <- plot_ly(region_canton_mas_accidentes, x = ~Región.Mideplan, y = ~max_valor, marker = list(color=paleta_colores) , type = 'bar', hoverinfo = 'text',
               text = ~paste("Región: ", Región.Mideplan, "<br>Cantón: ", Cantón, "<br>Valor: ", max_valor))

fig <- fig %>% layout(yaxis = list(title = ''),xaxis=list(title = ''), barmode = 'stack')

fig
```

